
import { userAccountLogin } from '@/api/user'

// 创建vuex实例化对象
const user = {
  namespaced: true,
  // 组件中的data选项必须是一个函数
  // 组件本身为了复用 复用组件的时候要保证组件内部的数据是相互独立的
  // 函数会生成一份独立的内存空间 各个组件相互独立
  // 函数每次调用 return出来的对象会生成一个全新的内存 虽然初始值看起来一致 但是互不相同
  //   state: () => ({ return {} })
  // 写函数return 对象的应用 vue data / state / props：默认参数 复杂类型 必须是工厂函数
  state: () => ({
    // 数据
    // 为了刷新不丢失 存储到本地
    profile: {
      id: '',
      account: '',
      nickname: '',
      avatar: '',
      token: '',
      mobile: ''
    }
  }),
  mutations: {
    // 修改数据
    setProfile (state, useInfo) {
      state.profile = useInfo
    },
    // 清除数据的方法
    clearProfile (state, payload) {
      state.profile = {}
    }
  },
  actions: {
    // ctx 相当于store
    async doLogin (ctx, { account, password }) {
      // 发送登录请求
      const res = await userAccountLogin({ account, password })
      // 调用mutation存入数据
      ctx.commit('setProfile', res.data.result)
    }
  },
  getters: {
    // vue计算属性
  }
}

export default user
